|
Date : 29 mars 1990 Programme : DRAGON'S LAIR Outils : SOURCER, PERISCOPE SOFT, EXEHEAD. Protection : Mot de passe Temps pass� : 1 heure environ Fichier : GAME.EXE Soci�t� : READY SOFT Divers : Origine : SOLO-INDONESIE Num�ro : 012 Dragon's lair comporte un fichier GAME.EXE qui fait 15k. Pourtant impossible � charger avec TD ni CV. Pas assez de place m�moire!. Avec SOURCER on s'apercoit que le HEADER du fichier � �t� trafiqu�. afin de r�server plus de m�moire qu'il n'en faut. Avec EXEHEAD.EXE de MICROSOFT on confirme le fait d'une facon �crasante, il suffit d'examiner la derni�re ligne: Magic number: 5a4d ;propre aux *.EXE Bytes on last page: 0125 Pages in file: 001e Relocations: 002c Paragraphs in header: 0020 Extra paragraphs needed: 76fa Extra paragraphs wanted: ffff Initial stack location: 798c:1000 Word checksum: 0000 Entry point: 0000:0100 ;CS:IP Relocation table address: 0022 Memory needed: 491K Avec PERISCOPE on peut sauter � l'endroit du code, mais on ne peut pas TRACER le programme d�s la premi�re instruction m�me avec l'option RUN.COM de PERISCOPE. Avec le listing que produit SOURCER on s'apercoit en fait que le programme principal consiste essentiellement en une suite de CALL. Un "bon" programmeur pas trop vicieux construit son programme d'une facon structur�e et a ( en principe ) inclus la recherche de code dans un sous-programme et de pr�f�rence dans le premier CALL. L'id�e vient donc tout naturellement de commencer � "travailler" ce premier CALL, mais voil� impossible de d�marrer ce programme � sa premi�re instruction.... Il existe pourtant une solution avec ce bon vieux PERISCOPE; - lancer PERISCOPE normalement, - lancer RUN sans parametres, - charger le programme GAME.EXE comme un fichier sans l'executer en tapant N GAME.EXE puis LF, - lire le segment de donn�e et rajouter 10h, ceci permet pour un fichier EXE de pointer directement sur le premier octet du PSP du fichier. Une v�rification simple est de s'assurer que l'on y trouve bien 5A4D signature propre � tout les fichiers EXE. - DW DS:00 ----> 5A4D - dumper la position 08h ( taille du HEADER du programme ) - DW DS:08 ----> XXXX - dumper la position 16h ( adresse du d�but du segment CODE ) - DW DS:16 ----> YYYY - dumper la position 14h ( IP ) - DW DS:14 ----> ZZZZ - chercher la premi�re instruction en faisant E DS+XXXX+YYYY:ZZZZ et remplacer la valeur par CC ( int 3 ). - r��crire le fichier ainsi modifi� sur le disque par WF, - quitter PERISCOPE et lancer GAME.EXE.... .... le control est rendu � PERISCOPE d�s la premi�re instruction de GAME.EXE! On fait du TRACE jusqu'au premier CALL qu'on ignore superbement par 3 NOP ( 909090 ) assembl�s ON-LINE et.... BINGO! Il ne reste plus qu'� faire la modif avec PCTOOLS, Dans la s�rie de sauts: E82736 E87F27 E87E1D E87814 Remplacer la premi�re s�rie par 909090. Ci dessous le listing comment� de PERISCOPE, la commande /E est � ignorer; elle permet juste de transferer tout ce qui apparait sur l'�cran de PERISCOPE sur un fichier disque. /E>n game.exe ; Donne le nom du fichier sur ; lequel on va travailler. /E>lf ; Charge le fichier GAME.EXE /E>rds ; On ajuste DS � +10h. DS 233F :ds+10 /E>dw ds:8l1 ; Dump de la taille du HEADER 234F:0008 0020 ; en paragraphes du programme. /E>dw ds:16l1 ; Dump de CS. 234F:0016 0000 /E>dw ds:14l1 ; Dump de IP. 234F:0014 0100 /E>e ds+0020+0000:0100 ; Recherche de la premi�re ; adresse du programme. 236F:0100 1E.CC ; On remplace par INT 3 CCh /E>wf ; On r��crit le fichier sur le ; disque pour l'executer. Un d�ssassemblage � partir de l'adresse calcul�e plus haut montre que l'on se trouve effectivement dans le programme. ( une fois execut� ). A cet endroit on r��crit l'instruction d'origine ( 1E ) pour faire du trace. ( pour un programme COM la m�thode est beaucoup plus simple... > N XXX.COM > LF > E DS:100 ). Listing; /E>u 236F:0100 CC INT 3 ; d�but du programme... 236F:0101 33C0 XOR AX,AX 236F:0103 50 PUSH AX 236F:0104 8CC8 MOV AX,CS 236F:0106 8ED8 MOV DS,AX 236F:0108 2E CS: 236F:0109 C6066D1D01 MOV BYTE PTR [1D6D],01 236F:010E 2E CS: 236F:010F C606BA0801 MOV BYTE PTR [08BA],01 236F:0114 90 NOP 236F:0115 90 NOP 236F:0116 90 NOP 236F:0117 E87F27 CALL 2899 ; s�ries de CALL... 236F:011A E87E1D CALL 1E9B . 236F:011D E87814 CALL 1598 . 236F:0120 E87A2D CALL 2E9D . 236F:0123 E82321 CALL 2249 . 236F:0126 E83704 CALL 0560 . 236F:0129 E87E23 CALL 24AA . 236F:012C E80C00 CALL 013B . 236F:012F E89A23 CALL 24CC . 236F:0132 E8902D CALL 2EC5 . 236F:0135 B80300 MOV AX,0003 236F:0138 CD10 INT 10 236F:013A CB RETF ; fin du programme.... |